package org.dna.opdracht4;

import java.util.ArrayList;
import java.util.List;

public class GenericGraph<T> {
	private List<Vertex<T>> vertices;

	public GenericGraph() {
		this.vertices = new ArrayList<Vertex<T>>();
	}

	/**
	 * Geeft de lijst van vertices uit de graaf.
	 * 
	 * @param List
	 *            <Vertex<T>> de lijst met vertices.
	 * */
	public List<Vertex<T>> getVertices() {
		return this.vertices;
	}

	/**
	 * Geeft weer of een graaf leeg is of dat de graaf enige vertices heeft.
	 * 
	 * @return boolean
	 */
	public boolean isEmpty() {
		return this.vertices.size() == 0;
	}

	/**
	 * Verwijdert alle vertices.
	 * */
	public void clear() {
		this.vertices.clear();
	}

	/**
	 * Voegt een vertex toe aan de graaf met Data T.
	 * 
	 * @param T
	 *            de data welke toegevoegd moet worden.
	 */
	public void addVertex(T data) {
		this.addVertex(new Vertex<T>(data));
	}

	/**
	 * Voegt een vertex toe aan de graaf.
	 * 
	 * @param Vertex
	 *            <T> de vertex welke toegevoegd dient te worden.
	 */
	public void addVertex(Vertex<T> vertex) {
		if (this.vertices.contains(vertex)) {
			throw new IllegalArgumentException(
					"The vertex already exists in the graph.");
		}

		this.vertices.add(vertex);
	}

	/**
	 * Zoekt een bepaalde vertex welke data T heeft.
	 * 
	 * @param T
	 *            te zoeken data.
	 * @return Vertex null of gevonden vertex.
	 */
	public Vertex<T> findVertex(T data) {
		int i = 0;
		Vertex<T> vertex = null;

		while (vertex == null) {
			if (this.vertices.get(i).getValue().equals(data)) {
				vertex = this.vertices.get(i);
			}
			i++;
		}

		return vertex;
	}
}